Skip to content

CAMEL-23255: Retry Infinispan schema registration on IllegalLifecycleStateException#22278

Open
gnodet wants to merge 3 commits intomainfrom
CAMEL-23255-infinispan-schema-retry
Open

CAMEL-23255: Retry Infinispan schema registration on IllegalLifecycleStateException#22278
gnodet wants to merge 3 commits intomainfrom
CAMEL-23255-infinispan-schema-retry

Conversation

@gnodet
Copy link
Copy Markdown
Contributor

@gnodet gnodet commented Mar 26, 2026

Summary

When Camel and a remote Infinispan server start concurrently (e.g., in Kubernetes), the server's internal ___protobuf_metadata cache may not be ready yet, causing embedding store schema registration to fail immediately with RemoteIllegalLifecycleStateException.

This PR adds retry logic around the schema registration call in InfinispanRemoteManager.doStart():

  • Uses Camel's ForegroundTask with an IterationTimeBoundedBudget (1s interval, configurable max duration)
  • Passes camelContext to ForegroundTask for task monitoring visibility
  • Sets descriptive task name "infinispan-schema-registration" for observability
  • Adds a new embeddingStoreSchemaRegistrationTimeout configuration property (Duration, default 60s) so users can tune the timeout
  • Logs first retry at INFO level so operators notice the wait, subsequent retries at DEBUG
  • Only RemoteIllegalLifecycleStateException triggers retries — other errors (bad credentials, invalid schema, network issues) fail immediately without waiting
  • Includes unit tests for the retry pattern (success after transient failures, exhaustion, non-lifecycle exception propagation)

Test plan

  • Unit tests for retry pattern (3 test cases)
  • Verify existing Infinispan integration tests pass (CI)
  • Verify schema registration succeeds when server starts concurrently

Claude Code on behalf of Guillaume Nodet

When Camel and a remote Infinispan server start concurrently (e.g., in
Kubernetes), the server's internal ___protobuf_metadata cache may not
be ready yet, causing schema registration to fail with
RemoteIllegalLifecycleStateException.

Add retry logic using Camel's ForegroundTask with a configurable
timeout (embeddingStoreSchemaRegistrationTimeout, default 60s). Only
RemoteIllegalLifecycleStateException triggers retries; other errors
(bad credentials, invalid schema, network issues) fail immediately.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@gnodet gnodet requested review from Croway and oscerd March 26, 2026 10:06
@github-actions
Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using build-all, build-dependents, skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@gnodet gnodet force-pushed the CAMEL-23255-infinispan-schema-retry branch from 13b0b83 to 16363e5 Compare March 26, 2026 11:02
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@gnodet gnodet force-pushed the CAMEL-23255-infinispan-schema-retry branch from 16363e5 to b76ed37 Compare March 26, 2026 11:20
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 26, 2026

🧪 CI tested the following changed modules:

  • catalog/camel-catalog
  • components/camel-infinispan/camel-infinispan
  • dsl/camel-componentdsl
  • dsl/camel-endpointdsl
All tested modules (76 modules)
  • Camel :: AI :: LangChain4j :: Embedding
  • Camel :: AI :: LangChain4j :: Embedding [jar]
  • Camel :: AI :: LangChain4j :: EmbeddingStore
  • Camel :: AI :: LangChain4j :: EmbeddingStore [jar]
  • Camel :: All Components Sync point
  • Camel :: All Components Sync point [pom]
  • Camel :: Assembly
  • Camel :: Assembly [pom]
  • Camel :: Catalog :: CSimple Maven Plugin (deprecated) [maven-plugin]
  • Camel :: Catalog :: CSimple Maven Plugin (deprecated) SUCCESS [ 1.642 s]
  • Camel :: Catalog :: Camel Catalog
  • Camel :: Catalog :: Camel Catalog [jar]
  • Camel :: Catalog :: Camel Report Maven Plugin
  • Camel :: Catalog :: Camel Report Maven Plugin [maven-plugin]
  • Camel :: Catalog :: Camel Route Parser
  • Camel :: Catalog :: Camel Route Parser [jar]
  • Camel :: Catalog :: Console
  • Camel :: Catalog :: Console [jar]
  • Camel :: Catalog :: Dummy Component
  • Camel :: Catalog :: Dummy Component [jar]
  • Camel :: Catalog :: Lucene (deprecated)
  • Camel :: Catalog :: Lucene (deprecated) [jar]
  • Camel :: Catalog :: Maven
  • Camel :: Catalog :: Maven [jar]
  • Camel :: Catalog :: Suggest
  • Camel :: Catalog :: Suggest [jar]
  • Camel :: Component DSL
  • Camel :: Component DSL [jar]
  • Camel :: Coverage
  • Camel :: Coverage [pom]
  • Camel :: Docs
  • Camel :: Docs [pom]
  • Camel :: Endpoint DSL
  • Camel :: Endpoint DSL [jar]
  • Camel :: Endpoint DSL :: Support
  • Camel :: Endpoint DSL :: Support [jar]
  • Camel :: Infinispan :: Remote
  • Camel :: Infinispan :: Remote [jar]
  • Camel :: Integration Tests
  • Camel :: Integration Tests [jar]
  • Camel :: JBang :: Core
  • Camel :: JBang :: Core [jar]
  • Camel :: JBang :: Integration tests
  • Camel :: JBang :: Integration tests [jar]
  • Camel :: JBang :: MCP
  • Camel :: JBang :: MCP [jar]
  • Camel :: JBang :: Main
  • Camel :: JBang :: Main [jar]
  • Camel :: JBang :: Plugin :: Edit
  • Camel :: JBang :: Plugin :: Edit [jar]
  • Camel :: JBang :: Plugin :: Generate
  • Camel :: JBang :: Plugin :: Generate [jar]
  • Camel :: JBang :: Plugin :: Kubernetes
  • Camel :: JBang :: Plugin :: Kubernetes [jar]
  • Camel :: JBang :: Plugin :: Route Parser
  • Camel :: JBang :: Plugin :: Route Parser [jar]
  • Camel :: JBang :: Plugin :: Testing
  • Camel :: JBang :: Plugin :: Testing [jar]
  • Camel :: JBang :: Plugin :: Validate
  • Camel :: JBang :: Plugin :: Validate [jar]
  • Camel :: Kamelet Main
  • Camel :: Kamelet Main [jar]
  • Camel :: Launcher
  • Camel :: Launcher [jar]
  • Camel :: Launcher :: Container
  • Camel :: Launcher :: Container [pom]
  • Camel :: YAML DSL
  • Camel :: YAML DSL [jar]
  • Camel :: YAML DSL :: Deserializers
  • Camel :: YAML DSL :: Deserializers [jar]
  • Camel :: YAML DSL :: Maven Plugins
  • Camel :: YAML DSL :: Maven Plugins [maven-plugin]
  • Camel :: YAML DSL :: Validator
  • Camel :: YAML DSL :: Validator [jar]
  • Camel :: YAML DSL :: Validator Maven Plugin
  • Camel :: YAML DSL :: Validator Maven Plugin [maven-plugin]

apupier
apupier approved these changes Mar 26, 2026
- Pass camelContext to ForegroundTask for task monitoring visibility
- Set descriptive task name "infinispan-schema-registration"
- Log first retry at INFO level so operators see the wait without debug
- Include timeout duration in the failure exception message
- Add unit tests for the retry pattern

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants